#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 第1行注释可以让这个hello.py文件直接在Unix/Linux/Mac上运行，
# 第2行注释表示.py文件本身使用标准UTF-8编码；
print(type(123))
print(type(12.3))
print(type("123"))
print(type(False))
print(type(abs))
print(type(object))
import types


def fun():
    pass


print(type(fun))
print(type(fun) == types.FunctionType)
# 总是优先使用isinstance()判断类型，可以将指定类型及其子类“一网打尽”。
print(isinstance([1, 2, 3], (tuple, list)))
# 如果要获得一个对象的所有属性和方法，可以使用dir()函数
print(dir([1, 2, 3]))
# len()方法和__len__()方法
print(len('abcdef'), 'abcdef'.__len__())


# 我们自己写的类，如果也想用len(myObj)的话，就自己写一个__len__()方法：
class MyDog(object):
    def __init__(self):
        self.name = "MyDog"
        self.weight = 100

    def __len__(self):
        return 100

    pass


myDog = MyDog()
print(myDog.__len__())
print(len(myDog))
# 仅仅把属性和方法列出来是不够的，配合getattr()、setattr()以及hasattr()，我们可以直接操作一个对象的状态：
print(getattr(myDog, "name", "默认"))
setattr(myDog, "name", "default")
print(getattr(myDog, "name", "默认"))
print(hasattr(myDog, "name"))
print(hasattr(myDog, "names"))
